package com.liveneo.adapter.mobile.service;

import java.util.List;
import com.liveneo.adapter.base.entity.PrpmLossItem;
import com.liveneo.adapter.base.entity.PrpmLossRemark;
import com.liveneo.adapter.base.entity.PrpmOcrPayee;
import com.liveneo.adapter.mobile.model.dto.AssessLossInfoDto;
import com.liveneo.adapter.mobile.model.request.AddLossItemRequest;
import com.liveneo.adapter.mobile.model.request.AssessLossItemRequest;
import com.liveneo.adapter.mobile.model.request.LossItemRequest;
import com.liveneo.adapter.mobile.model.request.LossReassignRequest;
import com.liveneo.adapter.mobile.model.request.LossRemarkRequest;
import com.liveneo.adapter.mobile.model.request.OcrPayeeInfoRequest;
import com.liveneo.adapter.mobile.model.request.SaveSurveyLossInfoRequest;
import com.liveneo.adapter.mobile.model.response.SurveyLossInfoResponse;
import com.liveneo.system.base.utils.AppException;

/**
 * 损失相关接口
 * 
 * @author wangxx
 * 
 * @since 2016-06-12
 */
public interface MobileLossService {
    /***
     * 根据手机号获取定损任务
     * @param phoneNo
     * @return
     */
    List<PrpmLossItem> getLossItemListByphoneNo(String phoneNo) throws AppException;

    List<PrpmLossItem> getLossListByUserCodeOrLastTwo(String userCode, String lastTwo,String source);

    /**
     * 通过定损项的uuid集合获取定损项列表
     * @param lossUuids 定损项uuid集合
     * @return 返回定损项列表
     */
    List<PrpmLossItem> getLossItemListByUuids(List<String> lossUuids);

    /**
     * 获取案件损失任务列表
     * @param request 请求的参数 包括caseUuid 案件的ID surveyCode 查勘员的代码 和分页信息 完成标识 isFinish
     * @return 返回损失任务列表
     * @throws AppException 抛出异常
     */
    List<PrpmLossItem> getLossItemList(LossItemRequest request) throws AppException;

    /**
     * 获取查勘信息列表
     * @param caseUuid 案件ID
     * @return 返回查勘信息列表
     */
//    List<PrpmLossItem> getSurveyLossItem(String caseUuid);

    /**
     * 获取定损单任务列表
     * @param surveyUserCode 查勘员代码
     * @return 返回定损列表
     * @throws AppException 抛出校验的异常
     */
    List<PrpmLossItem> getAssessLossItem(AssessLossItemRequest request) throws AppException;

    /**
     * 获取查勘信息的详情
     * @param lossUuid 损失任务ID
     * @param surveyItemFlag 查询信息列表标识 0-公共信息 1-现场信息 2-查勘意见 3-三者车信息 4-物损损失项 5-人员伤亡信息 6-直接理赔费用 7-预估信息
     * @return 返回查勘信息详情
     * @throws Exception 对象属性映射错误
     */
    SurveyLossInfoResponse getSurveyLossInfo(String lossUuid, String surveyItemFlag) throws Exception;

    /**
     * @Title:获取定损信息
     * @Description: TODO
     * @param @param caseNo
     * @param @param lossId
     * @param @return 设定文件
     * @return PrpmLossItem 返回类型
     * @throws
     */
    PrpmLossItem getLossItemByCaseNoLossId(String caseNo, String lossId);

    /**
     * @Title: 获取损失项信息
     * @Description: TODO
     * @param @param lossuuid
     * @param @return 设定文件
     * @return PrpmLossItem 返回类型
     * @throws
     */
    PrpmLossItem getLossItemByLossUuid(String lossuuid);

    /**
     * @Title: 更新损失项
     * @Description: TODO
     * @param @param prpmLossItem 设定文件
     * @return void 返回类型
     * @throws
     */
    void updateLosssItemById(PrpmLossItem prpmLossItem);

    /**
     * @Title: 自助获取案件信息
     * @Description: TODO
     * @param @param caseNo
     * @param @param lossId
     * @param @return 设定文件
     * @return PrpmLossItem 返回类型
     * @throws
     */
    List<PrpmLossItem> getLossItemByMobileLossId(String mobile, String lossId);

    /**
     * 查勘信息 暂存
     * 
     * @param request 查勘信息请求的参数
     */
    void saveSurveyLossInfo(SaveSurveyLossInfoRequest request);

    /**
     * 查勘任务-增加支付信息
     * 
     * @param request 支付信息
     * @throws AppException 抛出校验的异常
     */
    void addPayeeInfo(OcrPayeeInfoRequest request) throws AppException;

    /**
     * @param lossUuid
     * @return
     */
    PrpmOcrPayee getPayeeInfo(String lossUuid);

    /**
     * 录入查勘信息备注
     * @param request 案件备注信息
     * @throws AppException 抛出校验的异常
     */
    void addLossRemark(LossRemarkRequest request) throws AppException;

    /**
     * 通过查勘任务ID 查询备注列表
     * @param lossUuid 查勘任务ID
     * @return 返回备注列表
     */
    List<PrpmLossRemark> getLossRemarkByLossUuid(String lossUuid);

    /**
     * 增加损失任务
     * @param request 任务信息
     * @throws AppException 抛出校验的异常
     */
    void addLossItem(AddLossItemRequest request) throws AppException;

    /**
     * 获取定损信息
     * @param lossUuid 定损ID
     * @return 返回定损信息
     */
    AssessLossInfoDto getLossInfo(String lossUuid);

    /**
     * 任务申请改派
     * @param request 请求的参数
     * @throws AppException 抛出校验错误
     */
    void lossReassign(LossReassignRequest request) throws AppException;

    /**
     * 根据案件号获取定损信息
     * @param caseNo
     * @return
     */
    List<PrpmLossItem> getLossItemByCaseNo(String userCode, String caseNo, String caseUuid);
}
